/**
ES6 对象 新增的  一组 静态方法：
  Object.seal(obj/arr)
   作用：密封一个对象/数组，返回密封后的对象/数组，
            和源对象/数组是同一个对象/数组
    一旦对象/数组被密封了之后，有如下特点：
    1. 属性/下标元素 不可删除
    2. 不可扩展（新增）新属性/元素
    3. 属性的值只要原来是可修改（写入）的就可以改变 / 下标元素 可修改
    4. 只能获取（读取）属性/指定下标的元素

    比Object.freeze()能力稍微弱一点

  Object.isSealed(): 判断一个对象/数组是否被密封了
  Object.isExtensible(): 判断一个对象/数组是否是可扩展的
                              （密封了对象和数组, 是不可扩展的，
                                即就是不可以在它上面添加新的属性/元素）

  获取源码、答疑、更多学习资料... ，添加个人VX： jspr_1314

*/
const obj = {
  name: '杜兰特',
  team: '雷霆'
}
const o = Object.seal(obj)
// console.log(o)// 
// console.log(o === obj)// true


// 删除 team属性
// delete obj.team
// 新增 nickname 属性
// obj.nickname = '包工头'

// 可 修改 team属性
// obj.team = '篮网'
// console.log(obj)

// 可获取 属性  或 遍历属性
// console.log(obj.name)
// console.log(obj.team)

// Object.keys(obj).forEach(key => {
//   console.log(key, obj[key])
// })

const arr = ['杜兰特', '欧文', '杜克']
const list = Object.seal(arr)
// console.log(list)
// console.log(arr === list)
// 修改/添加/删除 是不允许的
// unshift/push  shift/pop  splice  reverse   sort   fill
// arr.push('华子')
// arr.pop()

// 可改值
// arr[0] = '杜经理'
// console.log(arr)
// 可取值 或 可遍历
// console.log(arr[1])

console.log(Object.isSealed(arr))// true
console.log(Object.isExtensible(arr))// false
